package interfaces;

import gestores.GestorInterfaces;

import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;

import cliente.Cliente;
import dados.Registo;
import utils.Utilities;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.scene.control.Hyperlink;
import javafx.scene.control.Label;
import javafx.scene.control.ListView;
import javafx.scene.control.TextArea;
import javafx.scene.input.MouseEvent;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
import javafx.stage.WindowEvent;

public class EcranJogador extends VBox {

	@FXML
	private Label saldo;
	@FXML
	protected Label welcomeUser;
	@FXML
	protected Label labelAjudaPrincipal;
	@FXML
	protected Label labelAjudaJogador;

	@FXML
	private Label profileName;
	@FXML
	private Label profileDate;
	@FXML
	private Label profileMoney;
	@FXML
	private ListView<String> balancos;
	@FXML
	private TextArea agenteTextArea;
	private URI url;
	private URI ajuda;
	@FXML
	private Hyperlink link;
	
	private Stage stage;
	private Cliente cliente;
	private GestorInterfaces interfaces;

	public EcranJogador(Stage stage, Cliente cliente, GestorInterfaces interfaces, TextArea agenteTextArea) {
		this.cliente = cliente;
		this.stage = stage;
		this.interfaces = interfaces;
		this.agenteTextArea = agenteTextArea;
		criarJanelaJogador();
	}

	public void criarJanelaJogador() {
		FXMLLoader ecranJogador = new FXMLLoader(getClass().getResource("EcranJogador.fxml"));
		ecranJogador.setRoot(this);
		ecranJogador.setController(this);


		try {
			ecranJogador.load();
		} catch (IOException exception) {
			throw new RuntimeException(exception);
		}
		System.out.println("JANELA JOGADOR");
		System.out.println("Pontos: " + cliente.getJogador().getPontos());
		saldo.setText(Utilities.roundTo2DecimalsString(cliente.getJogador().getSaldo()) + "$");
		System.out.println("Saldo: " + cliente.getJogador().getSaldo());
		welcomeUser.setText(cliente.getJogador().getNome());

		ObservableList<String> items = FXCollections.observableArrayList();

		for(Registo r: cliente.getJogador().getHistorial()){
			if(r.isCompra_venda())
				items.add("VENDA: " + r.getSigla() + " - data: " + r.getTimestamp() + ", quantidade: " + r.getQuantidade() + ", valor: " + r.getValor());
			else
				items.add("COMPRA: " + r.getSigla() + " - data: " + r.getTimestamp() + ", quantidade: " + r.getQuantidade() + ", valor: " + r.getValor());
			FXCollections.observableArrayList(r);
		}
		balancos.setItems(items);
		fazerPerfil();
		
		try {
			url = new URI("http://" + link.getText());
		} catch (URISyntaxException e) {
			e.printStackTrace();
		}
		
		try {
			ajuda = new URI("http://46.137.99.16/myStock/Ajuda.jsp");
		} catch (URISyntaxException e) {
			e.printStackTrace();
		}
		
		stage.setOnCloseRequest(new EventHandler<WindowEvent>() {
		    @Override
		    public void handle(WindowEvent event) {
		    	System.exit(0);
		    }
		});
	}

	@FXML
	 public void irParaSite(ActionEvent e) {
		 try {
			java.awt.Desktop.getDesktop().browse(url);
		} catch (IOException e1) {
			e1.printStackTrace();
		}
    }
	
	@FXML
	public void perfilJogadorUserLabel(MouseEvent event) {
		stage.close();
		interfaces.ecranJogador(new Stage());
	}

	@FXML
	public void ecranInicialHomeImage(MouseEvent event){
		stage.close();
		interfaces.ecranInicial(new Stage());
	}

	@FXML
	public void ExitOption(ActionEvent event) {
		interfaces.ecranSair(new Stage());
	}

	@FXML
	public void opcaoAjuda(ActionEvent event) {
		 try {
			java.awt.Desktop.getDesktop().browse(ajuda);
		} catch (IOException e1) {
			e1.printStackTrace();
		}
	}

	@FXML
	public void logOut(MouseEvent event) {
		interfaces.ecranLogout(new Stage());
	}

	@FXML
	public void mostrarLabelAjudaPrincipal (MouseEvent evente){
		labelAjudaPrincipal.setOpacity(1);
	}
	@FXML
	public void mostrarLabelAjudaJogador (MouseEvent evente){
		labelAjudaJogador.setOpacity(1);
	}
	@FXML
	public void esconderLabelAjudaPrincipal (MouseEvent evente){
		labelAjudaPrincipal.setOpacity(0);
	}
	@FXML
	public void esconderLabelAjudaJogador (MouseEvent evente){
		labelAjudaJogador.setOpacity(0);
	}

	public void fazerPerfil(){
		profileName.setText(cliente.getJogador().getNome());
		profileMoney.setText(cliente.getJogador().getSaldo() + "$");
		profileDate.setText("15-04-2013");
	}
	public TextArea getAgenteTextArea() {
		return agenteTextArea;
	}

	public void setAgenteTextArea(TextArea agenteTextArea) {
		this.agenteTextArea = agenteTextArea;
	}
}